package me.ydq.core.table;

import me.ydq.mapper.Mapping;
import me.ydq.misc.PageData;
import org.springframework.jdbc.core.RowMapper;

/**
 * 和 slice 查询很相似，只是分页参数为 page/size，会自动查询 count
 */
public interface TablePage<T> extends TableSlice<T> {
    /**
     * 适合于查询单个字段的分页，以 page/size 进行分页
     */
    default <R> PageData<R> page(int page, int size, Class<R> returnType) {
        return slice((page - 1) * size, size, returnType);
    }

    /**
     * 适合于查询单个字段的分页，以 page/size 进行分页
     */
    default <R> PageData<R> page(int page, int size, Mapping<R> returnType) {
        return slice((page - 1) * size, size, returnType);
    }

    /**
     * 以 page/size 进行分页
     */
    default PageData<T> page(int page, int size) {
        return slice((page - 1) * size, size, rowMapper());
    }

    /**
     * 以 page/size 进行分页
     */
    default <R> PageData<R> page(int page, int size, RowMapper<R> rowMapper) {
        return slice((page - 1) * size, size, rowMapper);
    }

}
